
NAT
| Tags | |
|---|---|
| 開串 | AM |
| Created | |
| 最後編輯時間 | |
| 最後編輯者 | Rong |
NAT
網路位址轉換,NAT (Network Address Translation)
用於將封包中的目標或來源IP改寫,典型的使用案例是解決 IPv4 位址不足的問題, 例如在家用分享器 (包含Router功能) 中常會區分 外網 (WAN) 和 區域網 (LAN), 外網設定會取得一個公開位址 (Public IP),對區域網的裝置通常會指派 RFC 1918 中規範的私有位址 (Private IP),包含:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16而分享器設定時會有一個 Public IP ,但是分享器的目的在於讓內網的人都能上網,但是只有一個 Public IP,因此用到的是 NAT 技術,常見的模式分為 SNAT (Source NAT) 和 DNAT (Destination NAT),亦有 Basic NAT (Static NAT,轉換位址) ,NAPT (轉換位址和端口)等類型,但本節僅介紹 SNAT 和 DNAT
SNAT
又稱 Masquerade 、IP 偽裝,家用分享器最主要使用的 NAT 模式,以下面的網路拓樸作為範例
+-------------------+ <-----> | Device 1 | 192.168.0.10
(Internet) <---> | 分享器 | <-----> | Device 2 | 192.168.0.11
+-------------------+ <-----> | Device 3 | 192.168.0.12
61.72.34.87 | 192.168.0.1
WAN | LAN分享器對外只有一個 Public IP ,但是內網有三個裝置 ,SNAT 的作用就是將內網送出去的封包改寫,把裡面的 Private IP 替換成 61.72.34.87 這個 Public IP,從外網送回來回應封包時會有一套機制叫 connection track 決定該封包轉送到哪個內網裝置上,但是僅限是內網裝置主動向外網發起請求,外網無法主動連接到內網
DNAT
DNAT 將外網主動發起的封包轉送到內網的指定主機上,不過一般還會設定服務類型 (如http, mail, ftp) ,用途上 DNAT 可做到類似DMZ的效果。
例如在內網架設網頁伺服器,分享器設定 DNAT: TCP : 80 端口的封包轉送至 192.168.0.11,那 Remote Client 可以在瀏覽器使用 61.72.34.87 這個來連到 Web Server
+-----------+ <-> | Device 1 | 192.168.0.10
Remote Client <-> (Internet) <-> | 分享器 | <-> | Web Server | 192.168.0.11
+-----------+ <-> | Device 3 | 192.168.0.12
61.72.34.87 | 192.168.0.1
WAN | LANWeb Server 的回應封包,理論上是透過 SNAT 回應的,推測是系統在設定DNAT時會自動設定,非顯式設定,但是建議還是要適當的手動加入一些 SNAT 規則。
Linux NAT設定 (IPTables / IPv4)
<> 為必填引數,請替換成對應的參數,[] 為應變引數,某些情況必填
[ 1 ] 首先需要開啟 Linux 的 IP Forwarding 功能
輸入指令 vim /etc/sysctl.conf 打開配置文件 在文件中找到該行並把等號後的數字改成 1
net.ipv4.ip_forward = 1輸入指令 sysctl -p 使更改生效
[ 2 ] SNAT 設定指令
POSTROUTING 是 Linux iptables 裡面的一個 chain,相對來說是負責數據的輸出
iptables -t nat -A POSTROUTING -s <來源網段/遮罩> -o <目標網段網卡名稱> -j MASQUERADE把 Linux 當成家用分享器為例,來源網段就是內網 (LAN),目標網段就是外網 (WAN),-o 後必須填入連接外網的網卡名稱,最後 -j 後寫 MASQUERADE 表示是 SNAT
[ 3 ] DNAT 設定指令
PREROUTING 則在 iptables 中相對來說負責了數據的輸入
iptables -t nat -A PREROUTING -i <對外網卡名稱> -p <協議類型> [--dport 指定的端口] -j DNAT --to-destination <真實的目標IP>:<Port>接續上面家用分享器的例子,並在內網設一個負責特定服務的主機,-i 填入外網網卡,若有設有多個外網網卡也可以替換,有綁定服務到指定IP的概念,-p 則是指定該服務使用的網路協議如 tcp、udp、icmp 等,–dport 視情況填入或是不填,如 http (無加密) 網頁伺服器就需要該引數並填入 80,–to-destination 則是該服務主機在內網實際的IP
[ 4 ] 特定目的地ip轉發
PREROUTING 則在 iptables 中相對來說負責了數據的輸入
iptables -t nat -A PREROUTING -d <對外網ip> -p <協議類型> [--dport 指定的端口] -j DNAT --to-destination <內部的目標IP>:<Port>
AM
Rong